package myServer;

import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MyServer {

    ServerSocket server;

    MyServer() {
        try {
            server = new ServerSocket(8189);

            System.out.println("MyServer running...");

            Socket clientSocket;

            while (true) {
                clientSocket = server.accept();
                Connection c = new Connection(clientSocket);
            }
        } catch (IOException ex) {
        }

    }

    public static void main(String args[]) {
        MyServer sr = new MyServer();
    }

    private class Connection extends Thread {

        Socket s;
        BufferedReader s_in;
        PrintWriter s_out;

        Connection(Socket s) {
            try {
                this.s = s;
                s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
                s_out = new PrintWriter(s.getOutputStream(), true /* autoFlush */);

                System.out.println("Accepted connection from " + s.getInetAddress());
                s_out.println("Ciao, sono il server Gigio che gira su " + s.getLocalAddress());
                this.start();

            } catch (IOException ex) {
            }

        }

        @Override
        public void run() {
            String input = "";
            while (!input.trim().equals("BYE")) {
                try {
                    input = s_in.readLine();
                    String[] A = input.split(" ");
                    if (!A[0].equals("BYE")) {
                        s_out.println(op(A[0], A[1], A[2]));
                    }
                } catch (IOException ex) {
                } catch (NumberFormatException ex) {
                    s_out.println("Se scrivi dei numeri te ne sarei grato!! stronzo");
                } catch (ArrayIndexOutOfBoundsException ex){
                    s_out.println("Se scrivi dei numeri te ne sarei grato!! stronzo!!");
                }
            }
            try {
                s.close();
            } catch (IOException ex) {
            }
            System.out.println("Il pirla se n'è andato");
        }

        String op(String a, String s, String b) throws ClassCastException {

            int numeratoreA, denominatoreA, numeratoreB, denominatoreB;
            int numeratoreRisultato = 0, denominatoreRisultato = 0, max = 0, temp;
            boolean flag = false;

            if (a.contains("--")) {
                a = a.replace("--", "");
            }
            if (b.contains("--")) {
                b = b.replace("--", "");
            }

            String[] A = a.split("/");
            if (A.length == 1) {
                numeratoreA = new Integer(A[0]);
                denominatoreA = 1;
            } else {
                numeratoreA = new Integer(A[0]);
                denominatoreA = new Integer(A[1]);
            }

            String[] B = b.split("/");
            if (B.length == 1) {
                numeratoreB = new Integer(B[0]);
                denominatoreB = 1;
            } else {
                numeratoreB = new Integer(B[0]);
                denominatoreB = new Integer(B[1]);
            }

            if (s.equals("+")) {
                denominatoreRisultato = denominatoreA * denominatoreB;
                numeratoreRisultato = (denominatoreRisultato * numeratoreA / denominatoreA) + (denominatoreRisultato * numeratoreB / denominatoreB);
            }

            if (s.equals("-")) {
                denominatoreRisultato = denominatoreA * denominatoreB;
                numeratoreRisultato = (denominatoreRisultato * numeratoreA / denominatoreA) - (denominatoreRisultato * numeratoreB / denominatoreB);
            }

            if (s.equals("*")) {
                denominatoreRisultato = denominatoreA * denominatoreB;
                numeratoreRisultato = numeratoreA * numeratoreB;
            }

            if (s.equals(":")) {
                denominatoreRisultato = denominatoreA * numeratoreB;
                numeratoreRisultato = numeratoreA * denominatoreB;
            }


            do {
                if (denominatoreRisultato < 0 || numeratoreRisultato < 0) {
                    if (denominatoreRisultato < 0 && numeratoreRisultato < 0) {
                        denominatoreRisultato *= -1;
                        numeratoreRisultato *= -1;
                        if (denominatoreRisultato > numeratoreRisultato) {
                            max = denominatoreRisultato;
                        } else {
                            max = numeratoreRisultato;
                        }
                    } else {
                        if (denominatoreRisultato < 0) {
                            temp = denominatoreRisultato * -1;
                            if (temp > numeratoreRisultato) {
                                max = temp;
                            } else {
                                max = numeratoreRisultato;
                            }
                        }
                        if (numeratoreRisultato < 0) {
                            temp = numeratoreRisultato * -1;
                            if (temp > denominatoreRisultato) {
                                max = temp;
                            } else {
                                max = denominatoreRisultato;
                            }
                        }
                    }
                } else {
                    if (denominatoreRisultato > numeratoreRisultato) {
                        max = denominatoreRisultato;
                    } else {
                        max = numeratoreRisultato;
                    }
                }

                flag = false;

                for (int i = max; (i > 1) && (flag == false); i--) {
                    flag = false;
                    if ((denominatoreRisultato % i == 0) && (numeratoreRisultato % i == 0)) {
                        denominatoreRisultato /= i;
                        numeratoreRisultato /= i;
                        flag = true;
                    }
                }
            } while (flag == true);

            String res = "";

            if (denominatoreRisultato == 1) {
                res += numeratoreRisultato;
            } else {
                if (numeratoreRisultato == 0) {
                    res += "0";
                } else {
                    res += numeratoreRisultato + "/" + denominatoreRisultato;
                }
            }

            if (denominatoreRisultato == -1) {
                res = "-" + numeratoreRisultato;
            }

            if (res.contains("-")) {
                res = "-" + res.replace("-", "");
            }

            //System.out.println(res);

            return res;
        }
    }
}
